package com.example.crud.sys.mapper;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

/**
 * orm映射器
 *
 * @author zjarlin
 * @since 2023/02/13
 */
@Mapper
public interface OrmMapper {

    /**
     * 查找任意表任意列及id
     *
     * @param tableName 表名
     * @param column    列 入参
     * @return {@link List }<{@link Map }<{@link String }, {@link Object }>>
     * @author zjarlin
     * @since 2023/02/13
     */
    @Select("select id ,${column} from ${tableName}")
    List<Map<String, Object>> findAnyColumnOfAnyTable(String tableName, String column);

    /**
     * 根据id值修改任意表的任意列的值
     *
     * @param tableName 表名
     * @param column    列
     * @param tarValue  给定值
     * @param idValue   id值
     * @author zjarlin
     * @since 2023/02/13
     */
    @Update("update ${tableName} set ${column}=#{tarValue} where id=#{idValue}")
    // @Update("ALTER TABLE ${tab} add column ${yCol} VARCHAR(255)")
    void setColumnValueById(String tableName, String column, String tarValue, String idValue);

    /**
     * 给定日期区间数据保留,其余删除
     *
     * @param tableName    表名
     * @param localDateBeg 当地日期最小
     * @param localDateEnd 当地日期马克斯 入参 入参
     * @author zjarlin
     * @since 2023/02/14
     */
    void dataRetentionForAGivenDateRange(String tableName, String localDateBeg, String localDateEnd);

    @Insert("insert into ${tarTableName} select * from ${srcTableName}")
    void copyTab(String srcTableName, String tarTableName);

}
